// 引入接口
import { getCartListAPI, joinCartAPI, delCartAPI, singCheckCartAPI, allCheckCartAPI } from '@/api/cart'
const user = {
  // 开启命名空间
  namespaced: true,
  state: () => ({
    cartList: [] // 购物车列表
  }),
  mutations: {
    setCartList (state, list) {
      state.cartList = list
    }
  },
  actions: {
    // 拉取购物车列表数据
    async getCartListActions (ctx) {
      // 获取购物车列表
      const res = await getCartListAPI()
      // 把数据放到vuex
      ctx.commit('setCartList', res)
    },
    // 加入-购物车
    async insertCartActions (ctx, reqData) {
      // 加入购物车
      await joinCartAPI(reqData)
      // 重新拉取数据
      await ctx.dispatch('getCartListActions')
    },
    // 删除-购物车
    async delCartActions (ctx, reqData) {
      // 调用接口删除数据
      await delCartAPI(reqData)
      // 重新拉取数据
      await ctx.dispatch('getCartListActions')
    },
    // 单选/数量-购物车
    async singCheckActions (ctx, reqData) {
      // 调用接口,改变数据状态
      await singCheckCartAPI(reqData)
      // 重新拉取数据
      await ctx.dispatch('getCartListActions')
    },
    // 全选-购物车
    async allCheckActions (ctx, selected) {
      // 调用接口,改变数据状态
      await allCheckCartAPI({
        ids: ctx.state.cartList.map(item => item.skuId),
        selected
      })
      // 重新拉取数据
      await ctx.dispatch('getCartListActions')
    }
  },
  getters: {
    // 计算总价格
    allPrice (state) {
      return state.cartList.reduce((a, b) => a + b.price * b.count, 0)
    },
    // 计算总数量
    allCount (state) {
      return state.cartList.reduce((a, b) => a + b.count, 0)
    },
    // 被选中商品的总数量
    selectedCount (state) {
      return state.cartList.filter(item => item.selected).reduce((a, b) => a + b.count, 0)
    },
    // 被选中商品的总价格
    selectedPrice (state) {
      return state.cartList.filter(item => item.selected).reduce((a, b) => a + b.price * b.count, 0)
    },
    // 取消全选
    isAll (state) {
      return state.cartList.every(item => item.selected === true)
    }
  }
}
export default user
